package com.efuture.chaptertow

/* @Description: 函数内联学习
 * @Auther: zhaoshanshan
 * @Date: 2022/03/04/8:12 下午
 */

fun main() {
    //第一种方式
    loginApiTest("zhaoshanshan","123456",{ msg, code ->
        println("msg:$msg,code:$code")
    });
    //第二种方式
//    loginApiTest("zhaoshanshan","123456"){
//        msg,code->
//        println("msg:$msg,code:$code")
//    }

    //第三种方式
//    loginApiTest("zhaoshanshan","123456",responseResult = {
//        msg,code->
//        println("msg:$msg,code:$code")
//    })
}
//登录api
//此函数有使用lambda表达式作为函数参数 就需要声明成内联
//如果此函数不使用内联 在调用端会生成多个对象来完成lambda的调用(会造成性能损耗)
//如果此函数 使用内联 相当于c++ #define 宏定义 宏替换 会把代码替换到调用处 调用处没有任何函数 任何对象的开辟的损耗
//小结 如果函数参数有lambda 尽量使用inline关键字 这样内部会做优化 减少函数和对象的开辟损耗
inline fun loginApiTest1(username:String, password:String, responseResult:(String, Int)->Unit){

    if(null==username||null==password){
        println("用户名或者密码不能为空")
        return
    }
    if(username.length>3&&password.length>3){
        //调用登录
        if(webServiceLoginApiTest1(username,password)){
            responseResult("loginSuccrss",200)
        }else{
            responseResult("loginFail",400)
        }
    }else{
        println("用户名或者密码输入不合法")
        return
    }
}
fun webServiceLoginApiTest1(userName:String,password:String):Boolean{

    return if (userName.equals(USERNAME)&&password.equals(PASSWORD)) true else false

//    if(userName.equals("zhaoshanshan")&&password.equals("123456")){
//        return true;
//    }else{
//        return false
//    }
}